package com.uade.tp.negocio;

import java.util.Vector;

import com.uade.tp.negocio.view.ProductoSeccionView;
import com.uade.tp.negocio.view.SeccionView;
import com.uade.tp.persistencia.AdministradorPersistenciaProductoSeccion;
import com.uade.tp.persistencia.AdministradorPersistenciaSeccion;

public class Seccion {

	private static String ESTADO_ACTIVO = "Activo";
	private static String ESTADO_INACTIVO = "Inactivo";
	
	private String nombre;
	private Vector<ProductoSeccion> productos;
	private String especialidad;
	private boolean estado;
	
	public Seccion() {
		productos = new Vector<ProductoSeccion>();
		// TODO Auto-generated constructor stub
	}
	
	public Seccion(String nombre, String especialidad) {
		this.nombre = nombre;
		this.especialidad = especialidad;
		this.setEstado(true);
		productos = new Vector<ProductoSeccion>();
		AdministradorPersistenciaSeccion.getInstancia().insert(this);
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
		
		AdministradorPersistenciaSeccion.getInstancia().update(this);
	}
	
	public Vector<ProductoSeccion> getProductos() {
		if(productos.size() == 0) {
			productos = AdministradorPersistenciaProductoSeccion.getInstancia().obtenerProductos(this);
		}
		
		return productos;
	}
	
	public void obtenerProductos() {
		this.productos = AdministradorPersistenciaProductoSeccion.getInstancia().obtenerProductos(this);
		
	}
	
	public void setProductos(Vector<ProductoSeccion> productos) {
		this.productos = productos;
		
		AdministradorPersistenciaSeccion.getInstancia().update(this);
	}
	
	public String getEspecialidad() {
		return especialidad;
	}
	
	public void setEspecialidad(String especialidad) {
		this.especialidad = especialidad;
		
		AdministradorPersistenciaSeccion.getInstancia().update(this);
	}
	
	public SeccionView getView() {
		
		Vector<ProductoSeccionView> pv = new Vector<ProductoSeccionView>();
		
		for(int x = 0 ; x < this.productos.size() ; x++) {
			pv.add(this.productos.get(x).getView());
		}
		
		return new SeccionView(this.nombre,pv,this.especialidad);
	}
	
	public static Seccion buscarSeccion(String nombreSeccion) {
		return AdministradorPersistenciaSeccion.getInstancia().
							buscarSeccion(nombreSeccion);
	}
	
	public static boolean existeNombreSeccion(String nombreSeccion) {
		return buscarSeccion(nombreSeccion) != null;
	}

	public boolean isEstado() {
		return estado;
	}

	public void setEstado(boolean estado) {
		this.estado = estado;
	}

	public static Vector<SeccionView> obtenerSeccionesView() {
		// TODO Auto-generated method stub
		return AdministradorPersistenciaSeccion.getInstancia().
					obtenerSeccionesView();
	}
	
	public void eliminarProducto(String nombreProducto) {
		for (int x = 0 ; x < productos.size() ; x++) {
			if(productos.get(x).getProducto().getNombre().equals(nombreProducto)) {
				productos.get(x).delete(this.nombre);
				productos.remove(productos.get(x));
			}
		}
	}

	public void delete() {
			this.estado = false;
			
			for(int x = 0 ; x < productos.size() ; x++) {
				productos.get(x).delete(this.nombre);
			}
			
			AdministradorPersistenciaSeccion.getInstancia().delete(this);


	}
	
	public void actualizarStock (String nombreProducto, int stock) {
		for(int x = 0 ; x < productos.size() ; x++) {
			if(productos.get(x).getProducto().getNombre().equals(nombreProducto)) {
				stock += productos.get(x).getStock();
				productos.get(x).actualizarStock(stock,this.nombre);
			}
		}
	}

	/**
	 * Cuando se prepara una comida se descuenta el stock de la seccion.
	 * @param nombreProducto
	 * @param stock
	 */
	public void descontarStock(String nombreProducto, int stock) {
		for(int x = 0 ; x < productos.size() ; x++) {
			if(productos.get(x).getProducto().getNombre().equals(nombreProducto)) {
				stock = productos.get(x).getStock() - stock;
				productos.get(x).actualizarStock(stock,this.nombre);
			}
		}
	}

	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.nombre;
	}

	
}
